function isPureNumber(input) {
  return /^\d+$/.test(input);
}

var app = getApp();

Page({
  data: {
    paras: [
      { "id": 0, "name": "电池电压",  "value":0,"sendvalue":0,"index": 248, "datatype":1,"Comments":"72、60或48\n单位:V","condition":true,"checked":false},
      { "id": 1, "name": "母线电流",  "value":0,"sendvalue":0,"index": 3,   "datatype":0,"Comments":"影响提速和尾速,需低于\n空开和电池能力,单位:A","condition":true,"checked":false},
      { "id": 2, "name": "相线电流",  "value":0,"sendvalue":0,"index": 35,  "datatype":0,"Comments":"最大相电流决定峰值力矩\n单位:A","condition":true,"checked":false},
      { "id": 3, "name": "弱磁电流",  "value":0,"sendvalue":0,"index": 36,  "datatype":0,"Comments":"最大弱磁电流\n单位:A","condition":true,"checked":false },
      { "id": 4, "name": "电机极对数", "value":0,"sendvalue":0,"index": 13,  "datatype":1,"Comments":"转速显示与电机极对数关联","condition":true,"checked":false },
      { "id": 5, "name": "电机120°_60°霍尔相角切换",  "value":0,"sendvalue":0,"index": 254,  "datatype":1,"Comments":"","condition":false,"checked":false},
      { "id": 6, "name": "电机方向调整",  "value":0,"sendvalue":0,"index": 2,  "datatype":1,"Comments":"","condition":false,"checked":false },
      { "id": 7, "name": "整车型号",  "value":0,"sendvalue":0,"index": 105,  "datatype":1,"Comments":"","condition":true,"checked":false },
    ],
    viewdata:new Int32Array(16),
    Udc:0,
    Idc:0,
    Rpm: 0,
    Imag:0,
    TmpMos:0,
    TmpMot:0,
    WarnCode:0,
    initflag:false,//读取初始数据标志
    sendreq:false,//发送请求
    learnreq:false,//自学习请求
    learning:false,//正在自学习中
    learningcnt:0,//自学习计时
    Errtip:'故障提示',
    idx:0,
    index:0,//偏移地址
    sendvalue:0,
    mscount:0,

    showBatVolt: false,
    actionsBatVolt: [
      { name: '72V',color: '#07c160'},
      { name: '60V',color: '#ff976a'},
      { name: '48V',color: '#07c160'},
    ],

    showBikeType: false,
    actionsBikeType: [
      { name: '0：默认',color: '#ff976a'},
      { name: '1：极核AE5',color: '#07c160'},
      { name: '2：极核AE4SE',color: '#07c160'},
      { name: '3：极核AE4/EZ4',color: '#07c160'},
      { name: '10：九号常规车型直上',color: '#ff976a'},
      { name: '11：九号迭代车型直上',color: '#ff976a'},
      { name: '12：九号MZ系列车型直上',color: '#ff976a'},
    ]
  },
  action_onCloseBatVolt(event){
    this.setData({showBatVolt:false});//关闭显示
  },
  action_onSelectBatVolt(event) {
    this.setData({showBatVolt:false});//关闭显示
    //设置选择值后发送
    const selectedItem = event.detail;
    const actions = this.data.actionsBatVolt;
    let selectedIndex = -1;
    // 遍历 actions 数组，查找匹配的项
    for (let i = 0; i < actions.length; i++) {
      if (JSON.stringify(actions[i]) === JSON.stringify(selectedItem)) {
        selectedIndex = i;
        break;
      }
    }
    this.data.idx     = 0;
    this.data.index   = this.data.paras[this.data.idx].index;;
    this.data.sendvalue = selectedIndex;

    app.data.Rebuffi = 0;//接收区数据清零
    this.data.sendreq = true;//发送请求有效
    //更新显示
    var Updatapara = this.data.paras;
    if(this.data.sendvalue==0)
    Updatapara[this.data.idx ].value = 72;
    if(this.data.sendvalue==1)
    Updatapara[this.data.idx ].value = 60;
    if(this.data.sendvalue==2)
    Updatapara[this.data.idx ].value = 48;
    this.setData({paras:Updatapara});
   
   // app.data.learnreq = 1;//页面更新请求
    app.data.advaninitreq =1;//页面更新请求
  //  app.data.expertinitreq =1;//页面更新请求
  },

  action_onCloseBikeType(event){
    this.setData({showBikeType:false});//关闭显示

  },
  /*电机型号下拉选项，选中后的动作 */
  action_onSelectBikeType(event) {

    this.setData({showBikeType:false});//关闭显示
    //设置选择值后发送
    const selectedItem = event.detail;
    const actions = this.data.actionsBikeType;
    let selectedIndex = -1;
    // 遍历 actions 数组，查找匹配的项
    for (let i = 0; i < actions.length; i++) {
      if (JSON.stringify(actions[i]) === JSON.stringify(selectedItem)) {
        selectedIndex = i;
        if(i>3)//注意第四个开始是九号了，九号从10开始
        {
          selectedIndex +=6;
        }
        break;
      }
    }
    this.data.idx     = 7;
    this.data.index   = this.data.paras[this.data.idx].index;
    this.data.sendvalue = selectedIndex;//发送的数值

    app.data.Rebuffi = 0;//接收区数据清零
    this.data.sendreq = true;//发送请求有效
    //更新显示
    var Updatapara = this.data.paras;
    Updatapara[this.data.idx ].value = this.data.sendvalue;
    this.setData({paras:Updatapara});
   //app.data.learnreq = 1;//页面更新请求
   // app.data.advaninitreq =1;//页面更新请求
   // app.data.expertinitreq =1;//页面更新请求

  },

  onShow: function () {
    wx.setKeepScreenOn({keepScreenOn: true});//常亮
    this.interval =setInterval(this.updataview, 300);//报文周期处理，200ms周期
    this.data.idx = 0;
    this.data.mscount = 0;
  },
  onHide: function () { 
    wx.setKeepScreenOn({keepScreenOn: false});//关闭常亮   
    clearInterval(this.interval);
    this.data.idx = 0;
    this.data.mscount = 0;
  //  this.data.initflag= false;
  },
  onUnload: function () { 
    wx.setKeepScreenOn({keepScreenOn: false});//关闭常亮   
    clearInterval(this.interval);
    this.data.idx = 0;
    this.data.mscount = 0;
  //  this.data.initflag= false;
  },

  onChange(event)  {
    // 需要手动对 checked 状态进行更新
    if(this.data.initflag==false)return;
    if(this.data.sendreq==true)return;
    if(app.data.LOGOK==false)return;
    var Updatapara = this.data.paras;
    const id = parseInt(event.currentTarget.dataset.id, 10); // 将data-id转换为数字类型
    Updatapara[id].checked = event.detail;

    this.setData({paras:Updatapara});

    if(Updatapara[id].checked){
      Updatapara[id].sendvalue=1;
      Updatapara[id].value = 1;
    }
    else{
      Updatapara[id].sendvalue=0;
      Updatapara[id].value = 0;
    }
    this.data.index     = Updatapara[id].index;
    this.data.sendvalue = Updatapara[id].sendvalue;
    app.data.Rebuffi = 0;//接收区数据清零
    this.data.sendreq = true;//发送请求有效
    var tip=''
    if(id==5)
    {
      if(Updatapara[id].checked){
        tip = '切换为60°霍尔相角度'
      }
      else
      {
        tip = '切换为120°霍尔相角度'
      }
    }
    if(id==6)
    {
      if(Updatapara[id].checked){
        tip = '逆时针'
      }
      else
      {
        tip = '顺时针'
      }
    }
      wx.showToast({
        title: tip,
        icon: 'none', // 提示框的图标，可选值：'success', 'loading', 'none'（默认值）
        duration: 1000, // 提示框显示时间（毫秒），默认值为 1500
        mask: true // 是否显示透明蒙层，避免触摸穿透，可选值：true，false（默认值）
      })
  
  },

  editTodo: function (e) {
    const id = parseInt(e.currentTarget.dataset.id, 10); // 将data-id转换为数字类型
    console.log('点击的元素 id 为:', id);
    let that = this;
    var Updatapara = that.data.paras;

    if(that.data.initflag==false)return;
    if(app.data.LOGOK==false)return;

    if(id==0)//电池额定电压选择，用下拉单处理
    {
      this.setData({showBatVolt:true});
      return;
    }

    if(id==7)//车型号选择，用下拉单处理
    {
      this.setData({showBikeType:true});
      return;
    }

    // 根据id获取对应的待办事项，并进行编辑操作，可跳转到编辑页面或弹出编辑窗口
    // 示例代码：跳转到编辑页面

    wx.showModal({
      title: Updatapara[id].Comments,
      content: '',
      showCancel: true,
      confirmText: '确定',
      cancelText: '取消',
      editable:true,
      type: 'number',
      success: function (res) {
        if (res.confirm) {
          console.log('用户点击确定');
          console.log('输入的数值为：'+ res.content);
          // 在这里可以处理用户输入的数值
          // 使用parseFloat()尝试将输入内容转换为数值
          var parsedFloat = parseFloat(res.content);
          var parsedInt = parseInt(res.content);
          if (!isNaN(parsedFloat) || !isNaN(parsedInt))
          {
              Updatapara[id].value = res.content;//输入的字符串转成10进制,当前参数的id，当前参数的值。
              Updatapara[id].sendvalue = Updatapara[id].value;
              that.setData({paras:Updatapara});
 
              that.data.index     = Updatapara[id].index;
              that.data.sendvalue = Updatapara[id].sendvalue;

              if(Updatapara[id].datatype==0)//Q16格式特殊化处理
              {
                that.data.sendvalue = Updatapara[id].sendvalue*65536;
              }

              that.setData({paras:Updatapara});

              app.data.Rebuffi = 0;//接收区数据清零
              that.data.sendreq = true;//发送请求有效
              

          }
          else{//提示非数字输入
            wx.showToast({
              title: '无效输入',
              icon: 'none', // 提示框的图标，可选值：'success', 'loading', 'none'（默认值）
              duration: 2000, // 提示框显示时间（毫秒），默认值为 1500
              mask: true // 是否显示透明蒙层，避免触摸穿透，可选值：true，false（默认值）
            })
          }

        } else if (res.cancel) {
          console.log('用户点击取消');
        }
      },
    })

  },

  /**200ms周期执行 */
  updataview(){
       if(app.data.bleopen==false)
        {
          app.data.connecttips = '正在打开蓝牙'
          app.data.bleopen = true
          app.data.blefound = false;//清除蓝牙设备已找到标志
          app.openBluetoothAdapter()
        }
        if(app.data.connected==false && app.data.blefound==true )//蓝牙没连接，但已找到设备
        {
          app.data.connecttips = '正在连接'
          app.createBLEConnection()//自动连接蓝牙
          this.data.initflag = false;//参数重新读取初始化
          this.data.indx = 0;
        }
        if(app.data.connected==false)return;//蓝牙未连接，直接返回

        if(app.data.learnreq ==1)//页面更新请求
        {
          app.data.learnreq = 0;
          this.data.idx = 0;
          this.data.mscount = 0;
          this.data.initflag= false;//电池电压被修改，重新读取列表
        }

        if(this.data.mscount<1)//等待1个周期。
        {
          this.data.mscount++;
          this.data.idx = 0;
          app.data.Rebuffi=0;//清空接收的数据,防止别的页面也换过来没有情况缓存区
          return;
        }
      
    
        if(this.data.initflag==false)//参数读取未初始化
        {
          app.data.mscount++;
          if(app.data.mscount>30)//确认断连
          {
            app.data.mscount = 0;
            app.data.connected=false;//断连，重新连接
          }
          if((app.data.Rebuffi == 0)&&(app.data.mscount>20))//接收的数据为空
          {
            wx.showToast({
              title: '控制器未应答',
              icon: 'none', // 提示框的图标，可选值：'success', 'loading', 'none'（默认值）
              duration: 500, // 提示框显示时间（毫秒），默认值为 1500
              mask: true // 是否显示透明蒙层，避免触摸穿透，可选值：true，false（默认值）
            })
          }
          else{
            wx.showToast({
              title: '列表显示更新中...'+this.data.idx+'/8',
              icon: 'none', // 提示框的图标，可选值：'success', 'loading', 'none'（默认值）
              duration: 1000, // 提示框显示时间（毫秒），默认值为 1500
              mask: true // 是否显示透明蒙层，避免触摸穿透，可选值：true，false（默认值）
            })
          }
          
          if((app.data.Rebuffi>0) && (app.data.BLE_Rebuff[1]==3))//读数据应答，9个字节
          {
            var crc = app.crc16(app.data.BLE_Rebuff,app.data.Rebuffi);
            if(crc==0)//crc校验通过
            {
              var Updatapara = this.data.paras;
              var idupdata   = this.data.idx;
              this.data.viewdata[this.data.idx] = ((app.data.BLE_Rebuff[3]<<8)+app.data.BLE_Rebuff[4])+(((app.data.BLE_Rebuff[5]<<8)+app.data.BLE_Rebuff[6])<<16)//组合值
              Updatapara[idupdata].sendvalue =  this.data.viewdata[idupdata];
              if(idupdata==0)//注意这个是母线电压等级,需要转换成显示值
              {
                if(Updatapara[idupdata].sendvalue==0)//0:72V,1:60,2:48
                {
                  Updatapara[idupdata].sendvalue = 72;
                }
                else if(Updatapara[idupdata].sendvalue==1)//0:72V,1:60,2:48
                {
                  Updatapara[idupdata].sendvalue = 60;
                }
                else if(Updatapara[idupdata].sendvalue==2)//0:72V,1:60,2:48
                {
                  Updatapara[idupdata].sendvalue = 48;
                }
              }
              Updatapara[idupdata].value = Updatapara[idupdata].sendvalue;
              if(Updatapara[idupdata].datatype == 0)//IQ16
              {
                Updatapara[idupdata].value = (Updatapara[idupdata].sendvalue/65536).toFixed(1) //显示值
              }

              if(Updatapara[idupdata].value==0){
                Updatapara[idupdata].checked =false
              }
              else{
                Updatapara[idupdata].checked =true
              }

              this.data.idx++;//读取下一个
              app.data.crcerrcnt = 0;
              this.setData({//刷新显示页面
                paras:Updatapara
              });
            }
            else{
              app.data.crcerrcnt++;
            }
          }
          app.data.Rebuffi = 0;//清零接收
          if(this.data.idx<this.data.paras.length)//应答的参数，小于当前元素个数
          {//发送当前下标读取数据指令
            
           
            var Updatapara = this.data.paras;
            var addr = Updatapara[this.data.idx].index;//读取的偏移地址,注意这个是excel表中的行数
         
            app.data.BLE_Txbuff[0]= 0x01
            app.data.BLE_Txbuff[1]= 0x03
            app.data.BLE_Txbuff[2]= ((addr-2)*2)>>8;//高8位地址
            app.data.BLE_Txbuff[3]= ((addr-2)*2)&0x00FF;//低8位地址
            app.data.BLE_Txbuff[4]= 0x00
            app.data.BLE_Txbuff[5]= 0x02
            var crc = app.crc16(app.data.BLE_Txbuff,6);
            app.data.BLE_Txbuff[6]= (crc>>8)&0xFF
            app.data.BLE_Txbuff[7]= (crc)&0xFF

            app.data.Txbuffid = 0;
            app.writeBLECharacteristicValue()
          }
          else{//初始化已经完成
            app.data.Rebuffi = 0;
            this.data.initflag=true;

            wx.showToast({
              title: '已更新',
              icon: 'none', // 提示框的图标，可选值：'success', 'loading', 'none'（默认值）
              duration: 500, // 提示框显示时间（毫秒），默认值为 1500
              mask: true // 是否显示透明蒙层，避免触摸穿透，可选值：true，false（默认值）
            })

          }  
        }
        if(this.data.initflag==false)return;//未完成初始参数读取，直接返回。

        if((this.data.sendreq == true) && (this.data.learnreq==false))//存在参数写入请求,且不在自学习中。
        {
          if((app.data.Rebuffi>0))//写数据应答，8个字节
          {
            var crc = app.crc16(app.data.BLE_Rebuff,app.data.Rebuffi);
            if(crc==0){//crc校验通过
                app.data.Rebuffi = 0;//清零接收缓存区。
                this.data.sendreq=false;//取消写请求 return;
                app.data.savetirg = true;//存储请求
                return
            }
          }

          var Updatapara = this.data;
          var addr = Updatapara.index;//写入的偏移地址,注意这个是excel表中的行数
          var sendata = Updatapara.sendvalue;//发送的数据
          
          app.data.BLE_Txbuff1[0]= 0x01
          app.data.BLE_Txbuff1[1]= 0x10
          app.data.BLE_Txbuff1[2]= ((addr-2)*2)>>8;//高8位地址
          app.data.BLE_Txbuff1[3]= ((addr-2)*2)&0x00FF;//低8位地址
          app.data.BLE_Txbuff1[4]= 0x00
          app.data.BLE_Txbuff1[5]= 0x02
          app.data.BLE_Txbuff1[6]= 0x00
          app.data.BLE_Txbuff1[7]= (sendata>>8)&0x00FF
          app.data.BLE_Txbuff1[8]= (sendata)&0x00FF
          app.data.BLE_Txbuff1[9]= (sendata>>24)&0x0FF
          app.data.BLE_Txbuff1[10]=(sendata>>16)&0X0FF
          var crc = app.crc16(app.data.BLE_Txbuff1,11);

          app.data.BLE_Txbuff1[11]= (crc>>8)&0x0FF
          app.data.BLE_Txbuff1[12]= (crc)&0x0FF

          app.data.Txbuffid = 1;//写入类型
          app.writeBLECharacteristicValue()
        }

        if(app.data.savetirg ==true)
        {
          app.data.mscount++;
          if(app.data.mscount>20)//确认断连
          {
            app.data.mscount = 0;
            app.data.connected=false;//断连，重新连接
          }
          if((app.data.Rebuffi == 0)&&(app.data.mscount>5))//接收的数据为空
          {
            wx.showToast({
              title: '控制器未应答',
              icon: 'none', // 提示框的图标，可选值：'success', 'loading', 'none'（默认值）
              duration: 500, // 提示框显示时间（毫秒），默认值为 1500
              mask: true // 是否显示透明蒙层，避免触摸穿透，可选值：true，false（默认值）
            })
          }
          if((app.data.Rebuffi>0) && (app.data.BLE_Rebuff[1]==16))//写应答
          {
            var crc = app.crc16(app.data.BLE_Rebuff,app.data.Rebuffi);
            if(crc==0)//crc校验通过
            {
              app.data.savetirg = false;
              app.data.crcerrcnt = 0;
              wx.showToast({
                title: '设置成功！',
                icon: 'none', // 提示框的图标，可选值：'success', 'loading', 'none'（默认值）
                duration: 500, // 提示框显示时间（毫秒），默认值为 1500
                mask: true // 是否显示透明蒙层，避免触摸穿透，可选值：true，false（默认值）
              })
            }
            else{
              app.data.crcerrcnt++;
            }
          }
          else
          {
            this.savetirg();//存储触发
          }
          app.data.Rebuffi = 0;//清零接收

        }
        if(this.data.learnreq==true)//自学习请求
        {
          if((app.data.Rebuffi>0) && (app.data.BLE_Rebuff[1]==16))//写应答
          {
            var crc = app.crc16(app.data.BLE_Rebuff,app.data.Rebuffi);
            if(crc==0){//crc校验通过
                this.data.idx++;//CRC校验OK是正确应答，读取下一个，否则返回
            }
          }
          app.data.Rebuffi = 0;

          if(this.data.idx<9)//应答的参数，小于3
          {//发送当前下标读写入指令
            var addr=502 ;
            var sendata =0;
            if(this.data.idx<4)//第1个
            {
              addr = 510;
              sendata  = 1;
            }
            else if(this.data.idx<6)//第2个
            {
              addr = 502;
              sendata  = 3;
            }
            else if(this.data.idx<9)//第3个
            {
              addr = 503;
              sendata  = 1;
            }

            app.data.BLE_Txbuff1[0]= 0x01
            app.data.BLE_Txbuff1[1]= 0x10
            app.data.BLE_Txbuff1[2]= ((addr-2)*2)>>8;//高8位地址
            app.data.BLE_Txbuff1[3]= ((addr-2)*2)&0x00FF;//低8位地址
            app.data.BLE_Txbuff1[4]= 0x00
            app.data.BLE_Txbuff1[5]= 0x02
            app.data.BLE_Txbuff1[6]= 0x00
            app.data.BLE_Txbuff1[7]= (sendata>>8)&0x00FF
            app.data.BLE_Txbuff1[8]= (sendata)&0x00FF
            app.data.BLE_Txbuff1[9]= (sendata>>24)&0x0FF
            app.data.BLE_Txbuff1[10]=(sendata>>16)&0X0FF
            var crc = app.crc16(app.data.BLE_Txbuff1,11);

            app.data.BLE_Txbuff1[11]= (crc>>8)&0xFF
            app.data.BLE_Txbuff1[12]= (crc)&0xFF
  
            app.data.Txbuffid = 1;//写入类型
            app.writeBLECharacteristicValue()
          }
          else//自学习指令发送完毕
          {
            this.data.learning =true;
            this.data.learnreq = false;
            this.data.learningcnt = 0;
            wx.showToast({
              title: '正在自学习中，请勿做任何操作！'+ this.data.Rpm + 'rpm',
              icon: 'none', // 提示框的图标，可选值：'success', 'loading', 'none'（默认值）
              duration: 50000, // 提示框显示时间（毫秒）
              mask: true // 是否显示透明蒙层，避免触摸穿透，可选值：true，false（默认值）
            })
          }
        }

        if(this.data.learning==true)//正在学习中
        {
          wx.showToast({
            title: '自学习中，停转前请勿操作。'+ '转速:'+this.data.Rpm + ' rpm',
            icon: 'none', // 提示框的图标，可选值：'success', 'loading', 'none'（默认值）
            duration: 50000, // 提示框显示时间（毫秒）
            mask: true // 是否显示透明蒙层，避免触摸穿透，可选值：true，false（默认值）
          })

          this.updata();//正在学习中的读取
          this.data.learningcnt++;
          if(this.data.learningcnt > 150 && this.data.Rpm<10)//50秒以上且速度小于10，自学习完成
          {
            this.data.learning = false;
            this.data.learningcnt = 0;
            wx.showToast({
              title: '自学习完成！',
              icon: 'none', // 提示框的图标，可选值：'success', 'loading', 'none'（默认值）
              duration: 3000, // 提示框显示时间（毫秒）
              mask: false // 是否显示透明蒙层，避免触摸穿透，可选值：true，false（默认值）
            })
          }
          if((this.data.learningcnt > 40) &&(this.data.learningcnt < 45))//如果检测转速没有转要提示
          {
            if((this.data.Rpm <10) && (this.data.Rpm >-10))//没有转速
            {
                this.data.learning=false;
                this.data.learningcnt = 0;
                wx.showToast({
                  title: '请重启钥匙电重新开始自学习！',
                  icon: 'none', // 提示框的图标，可选值：'success', 'loading', 'none'（默认值）
                  duration: 3000, // 提示框显示时间（毫秒）
                  mask: false // 是否显示透明蒙层，避免触摸穿透，可选值：true，false（默认值）
                })
            }
          }

        }
  },

  savetirg()
  {
    var addr = 273;
    app.data.BLE_Txbuff1[0]= 0x01
    app.data.BLE_Txbuff1[1]= 0x10
    app.data.BLE_Txbuff1[2]= ((addr-2)*2)>>8;//高8位地址
    app.data.BLE_Txbuff1[3]= ((addr-2)*2)&0x00FF;//低8位地址
    app.data.BLE_Txbuff1[4]= 0x00
    app.data.BLE_Txbuff1[5]= 0x02
    app.data.BLE_Txbuff1[6]= 0x00
    app.data.BLE_Txbuff1[7]= 0
    app.data.BLE_Txbuff1[8]= 0
    app.data.BLE_Txbuff1[9]= 0
    app.data.BLE_Txbuff1[10]=0
    var crc = app.crc16(app.data.BLE_Txbuff1,11);

    app.data.BLE_Txbuff1[11]= (crc>>8)&0xFF
    app.data.BLE_Txbuff1[12]= (crc)&0xFF

    app.data.Txbuffid = 1;//写入类型
    app.writeBLECharacteristicValue()
  },

  learnbtn(){
    let that =this;

    if(app.data.connected==false)return;//蓝牙未连接，直接返回
    wx.showModal({
      title: '重点提示：',
      content: '学习电机会转高速，持续约1分钟,\n请确保将动力轮已悬空\n是否开始学习？',
      showCancel: true,
      confirmText: '开始',
      cancelText: '取消',
      type: 'number',
      success: function (res) {
        if (res.confirm) {
          console.log('用户点击确定');

          that.data.Rebuffi = 0;
          that.data.idx = 0;
          that.data.learnreq = true;

          wx.showToast({
            title: '电机自学习中，请稍后...',
            icon: 'none', // 提示框的图标，可选值：'success', 'loading', 'none'（默认值）
            duration: 15000, // 提示框显示时间（毫秒），默认值为 1500
            mask: true // 是否显示透明蒙层，避免触摸穿透，可选值：true，false（默认值）
          })

        } else if (res.cancel) {
          console.log('用户点击取消');
          app.learnreq = false;
        }
      },
    })
  },


  updata(){
    if(app.data.connected==true)//已经连接成功
    {
        this.revdeal();//接收数据的处理
        app.data.BLE_Txbuff[0]= 0x01
        app.data.BLE_Txbuff[1]= 0x03
        app.data.BLE_Txbuff[2]= 0x03
        app.data.BLE_Txbuff[3]= 0xfe
        app.data.BLE_Txbuff[4]= 0x00
        app.data.BLE_Txbuff[5]= 0x1c
        var crc = app.crc16(app.data.BLE_Txbuff,6);
        app.data.BLE_Txbuff[6]= (crc>>8)&0xFF
        app.data.BLE_Txbuff[7]= (crc)&0xFF
        app.data.Txbuffid = 0;
        app.writeBLECharacteristicValue()

    }
  },

  revdeal(){ 
      app.data.mscount++;
      if(app.data.mscount>100)//20S未应答，确认断连
      {
        app.data.mscount = 0;
        app.data.connected=false;//断连，重新连接
      }
      if((app.data.Rebuffi == 0)&&(app.data.mscount>120))//接收的数据为空 24秒确认无应答，相当于取消了
      {
        wx.showToast({
          title: '控制器未应答',
          icon: 'none', // 提示框的图标，可选值：'success', 'loading', 'none'（默认值）
          duration: 500, // 提示框显示时间（毫秒），默认值为 1500
          mask: true // 是否显示透明蒙层，避免触摸穿透，可选值：true，false（默认值）
        })
      }
      var crc = app.crc16(app.data.BLE_Rebuff,app.data.Rebuffi);
      if(crc==0)//crc校验通过
      {
          for(var i=0;i<14;i++)
          {
            this.data.viewdata[i]= ((app.data.BLE_Rebuff[4*i+3]<<8)+app.data.BLE_Rebuff[4*i+4])+(((app.data.BLE_Rebuff[4*i+5]<<8)+app.data.BLE_Rebuff[4*i+6])<<16)
          }
          app.data.crcerrcnt = 0;

          this.setData({
            Udc     : ((this.data.viewdata[2])>>16),
            Idc     :((this.data.viewdata[9])>>16),
            Rpm     : this.data.viewdata[0]>>16,
            Imag    : this.data.viewdata[3]>>16,
            TmpMos  : this.data.viewdata[4]>>16,
            TmpMot  : this.data.viewdata[5]>>16,
            WarnCode:this.data.viewdata[13]>0?this.data.viewdata[13]:this.data.viewdata[12],
          });

          if(this.data.WarnCode > 0)//存在故障
          {
            if(this.data.WarnCode==1)this.data.Errtip='过流'
            if(this.data.WarnCode==2)this.data.Errtip='超速'
            if(this.data.WarnCode==3)this.data.Errtip='过压'
            if(this.data.WarnCode==4)this.data.Errtip='钥匙电欠压'
            if(this.data.WarnCode==5)this.data.Errtip='Mos驱动电压异常'
            if(this.data.WarnCode==6)this.data.Errtip='5V电压异常'
            if(this.data.WarnCode==7)this.data.Errtip='角度信号断线'
            if(this.data.WarnCode==8)this.data.Errtip='硬过流'
            if(this.data.WarnCode==9)this.data.Errtip='电流闭环失败'
            if(this.data.WarnCode==10)this.data.Errtip='欠压'
            if(this.data.WarnCode==11)this.data.Errtip='控制器温度高'
            if(this.data.WarnCode==12)this.data.Errtip='电机过温'
            if(this.data.WarnCode==13)this.data.Errtip='电流传感器异常'
            if(this.data.WarnCode==14)this.data.Errtip='角度干扰'
      
            if(this.data.WarnCode==21)this.data.Errtip='刹车信号异常'
            if(this.data.WarnCode==23)this.data.Errtip='用户参数异常'
            if(this.data.WarnCode==24)this.data.Errtip='厂家参数异常'
            if(this.data.WarnCode==33)this.data.Errtip='学习失败'
            if(this.data.WarnCode==98)this.data.Errtip='程序校验失败'
            if(this.data.WarnCode==99)this.data.Errtip='型号校验失败'

              this.data.learning = false;//取消正在学习
              wx.showToast({
                    title: '自学习中止，控制器报警：'+ this.data.Errtip,
                    icon: 'none', // 提示框的图标，可选值：'success', 'loading', 'none'（默认值）
                    duration: 5000, // 提示框显示时间（毫秒），默认值为 1500
                    mask: false // 是否显示透明蒙层，避免触摸穿透，可选值：true，false（默认值）
                  })
          }
      }
      else
      {
        app.data.crcerrcnt++;
      }
    }
})